c++ - C 和 C++ 中 union 的用途
全部标签 我在cppdepend上看到了以下一小段代码地点。importstd;//Moduleimportdirective.intmain(){std::cout那么,C++中importstd;的目的是什么?如何在C++中使用importstd;而不是usingnamespacestd;?我尝试在G++编译器中编译程序,但出现错误。 最佳答案 So,Whatisthepurposeofimportstd;C++?它的目的是使std模块中的名称可用。模块是一种语言功能,已被提议包含在未来的C++标准中。Howtouseimportstd;
有没有办法在C++中获取union成员的数量?例如:unionU{inta;doubleb;charc;};intmain(){std::cout::value当然,std::union_members_count是虚构的。如果有办法,我该如何实现/使用它? 最佳答案 不,这在C++中是不可能的。C++没有反射,这是一种self描述代码的特性。 关于c++-获取union成员的数量,我们在StackOverflow上找到一个类似的问题: https://sta
我想要一种有效的方法来将已排序的vector与另一个已排序的vector进行就地union。就地而言,我的意思是算法不应该创建一个全新的vector或其他存储来存储union,即使是临时的。相反,第一个vector应该简单地增长新元素的数量。类似于:voidinplace_union(vector&A,constvector&B);之后,A包含AunionB的所有元素and被排序。std::set_union在不会工作,因为它会覆盖其目标,即A。另外,这是否可以只通过一次传递两个vector来完成?编辑:同时A和B中的元素应该只在A中出现一次。 最佳答案
union可以像类和结构一样用作类型(有一些限制)。它可以有成员函数。它可以用作OOP结构。据我所知,union只是导入到C++中以保持与C的向后兼容性。在这些年的编程中,我从未像使用类或结构那样使用union体作为OOP构造。Union作为OOP构造(而不仅仅是作为数据类型)是否有任何实际用途,或者它只是语言中永远没有用的残留部分?编辑:该标准明确允许union充当OOP构造。它允许union中的成员函数。以下代码编译和工作并且符合标准:unionA{inta;intk;voiddoSomething(){}};intmain(){Aobj;inti=obj.a;obj.doSome
这是来自Intel的Embreecode中的vec3fa.h.struct__aligned(16)Vec3fa{typedeffloatScalar;enum{N=3};union{__m128m128;struct{floatx,y,z;union{inta;floatw;};};};//otherstuffinstruct};外union在做什么?内心的结合对我来说更加神秘。代码中从未引用a和w变量。看起来这提供了一种使用适当的别名读取和写入m128、x、y和z的方便且干净的方法。它是如何工作的?int是怎么参与进来的?? 最佳答案
我对union体的理解是它的所有值都分配在同一个内存地址,并且内存空间与union体的最大成员一样大。但我不明白我们将如何实际使用它们。根据TheC++ProgrammingLanguage,这是一个最好使用union的代码.enumType{str,num};structEntry{char*name;Typet;char*s;//usesift==strinti;//useiift==num};voidf(Entry*p){if(p->t==str)couts;//...}在此之后Bjarne说:Thememberssandicanneverbeusedatthesametime,
我有一个包含2个指向不同数据类型的指针的union:union{UCHAR*_rawData;RGB*_RGBData;};typedefstructRGB{UCHARred;UCHARgreen;UCHARblue;}RGB;稍后在代码中..._rawData=newUHCAR[126];_RGBData=new_RGBData[42];//3timeslowerthanrawData所以我的问题是..像这样建立union安全吗?理论上两个变量都使用126字节,所以应该没问题,但我不确定所以我在这里问 最佳答案 联盟本身是有效的,
在浏览此C++常见问题解答时https://isocpp.org/wiki/faq/mixing-c-and-cpp#cpp-objs-passed-to-c我遇到了语句MostC++compilersuseabinaryobjectlayoutthatcausesthisconversiontohappenwithmultipleinheritanceand/orvirtualinheritance.我无法理解它的含义和应用。根据C++FAQ,此对象布局机制有助于C++编译器进行以下检查InC++itiseasytocheckifaDerived*calleddppointstoth
这是我标记的union:structUniformVariant{enumclassUNIFORM_TYPE{FLOAT,INT32,VEC2,VEC3,VEC4,MAT4}type;union{floatf;inti;glm::vec2v2;glm::vec3v3;glm::vec4v4;glm::mat4m4;}value;};如果我尝试这样使用它:voidsome_function(){UniformVariantv;some_other_function(v);}我收到编译错误useofdeletedfunction'UniformVariant::UniformVariant
重载后缀运算符时,我可以做一些简单的事情ClassFoo{private:intsomeBS;public://declarationofpre&postfix++Foooperator++();//restofclassnotshown};Prefix不需要带任何参数,所以当我定义它的时候,就像FooFoo::operator(){someBS++;return*this;}这对我来说非常有意义。当我去定义后缀重载时,我必须包含一个虚拟int参数FooFoo::operator++(int){Footemp=*this;someBS++;returntemp;}我的问题是为什么?我从